package com.rowline.admin.module.study.mybatiscache;

import org.apache.ibatis.session.SqlSession;

import java.sql.SQLException;

/**
 * ClassName:MybatisCacheDemo01
 * Created by 245167
 * on 2018/4/28  28:53
 *      第一次查询时，虽然关闭了SqlSession也就是一级缓存，但是因为启用了二级缓存，第一次查询到的结果被保存到二级
 * 缓存中，Mybatis在一级缓存中没有找到id为1的Employee对象，就会去二级缓存中查找，所以不会再次执行select语句。当
 * 禁用了二级缓存，又关闭了SqlSession，第二次查询mybatis就会再一次执行一次select语句。
 */
public class MybatisCacheDemo03 {

    public static void main(String[] args) {
        // 使用工厂类获得SqlSession对象
        SqlSession sqlSession = MySqlSessionFactory.getSqlSession();
        // 获得InterAgencyMapper对象
        InterAgencyMapper interAgencyMapper = sqlSession.getMapper(InterAgencyMapper.class);
        Long id = 5L;
        InterAgencyInfo agencyInfo = null;

        try {
            agencyInfo = interAgencyMapper.queryAgencyInfoById(id);
            System.out.println("1 - 查询到数据为 ：" + agencyInfo.toString());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        // 关闭一级缓存
        sqlSession.close();

        // 再次访问，需要再次获取一级缓存，然后才能查找数据，否则会抛出异常
        sqlSession = MySqlSessionFactory.getSqlSession();
        // 再次获得EmployeeMapper对象
        interAgencyMapper = sqlSession.getMapper(InterAgencyMapper.class);

        try {
            agencyInfo = interAgencyMapper.queryAgencyInfoById(id);
            System.out.println("2 - 查询到数据为 ：" + agencyInfo.toString());
        } catch (SQLException e) {
            e.printStackTrace();
        }

        sqlSession.close();

    }

}
